AWS Managed Microsoft ADのユーザー・グループ操作をAWS CLIから試してみた
しばたです。
9月中旬ごろからAWS Managed Microsoft ADで管理するドメインユーザーとグループの操作をAWS上で行える様になりました。
基本的な内容については弊社まるとによる次の記事をご覧ください。
本記事ではこの操作をAWS CLIから試してみました。
AWS Directory Service Data API
AWS Managed Microsoft ADのユーザーとグループの操作はAWS Directory Service Data APIと言う形で通常のAWS Directory Service APIとは別れた形で定義されています。
サービスのIDと名前空間はds-data
となり、AWS CLIもaws ds-data
コマンドを使う形になっています。
現時点ではAWS Managed Microsoft AD専用のAPIですが、将来的には他のディレクトリもサポートしたいのかもしれません。
試してみた
ここからは実際に動作確認していきます。
0. 検証環境
今回は私の検証用AWSアカウントにStandardエディションのディレクトリを用意しました。
ドメイン名はcorp.contoso.com
にしています。
ディレクトリの構築手順は割愛します。
各種操作はAWS CloudShellから行います。
本日時点でのAWS CLIのバージョンはVer.2.22.12でした。
$ aws --version
aws-cli/2.22.12 Python/3.12.6 Linux/6.1.115-126.197.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023
1. グループ管理機能の有効・無効化
最初にグループ管理機能を有効にする必要があり、aws ds enable-directory-data-access
コマンドで可能です。
無効にする場合はaws ds disable-directory-data-access
コマンドを使います。
現在の状態を取得するにはaws ds describe-directory-data-access
を使います。
# グループ管理機能の状態を取得する
aws ds describe-directory-data-access --directory-id "ディレクトリID"
# グループ管理機能を有効にする
aws ds enable-directory-data-access --directory-id "ディレクトリID"
# グループ管理機能を無効にする
aws ds disable-directory-data-access --directory-id "ディレクトリID"
これらのコマンドはAWS Directory Service API側の機能のためaws ds
コマンドとなっています。
今回作成したcorp.contoso.com
ドメイン(ディレクトリID : d-95674af4a8
)で動作確認すると以下の様になります。
# デフォルトではグループ管理は無効 (Disabled)
$ aws ds describe-directory-data-access --directory-id d-95674af4a8
{
"DataAccessStatus": "Disabled"
}
# グループ管理機能の有効化は直ちに終了し、状態が Enabling となる
$ aws ds enable-directory-data-access --directory-id d-95674af4a8
$ aws ds describe-directory-data-access --directory-id d-95674af4a8
{
"DataAccessStatus": "Enabling"
}
# しばらく待つと状態が Enabled となり完了する
$ aws ds describe-directory-data-access --directory-id d-95674af4a8
{
"DataAccessStatus": "Enabled"
}
# グループ管理機能の無効化は直ちに終了し、状態が Disabling となる
$ aws ds disable-directory-data-access --directory-id d-95674af4a8
$ aws ds describe-directory-data-access --directory-id d-95674af4a8
{
"DataAccessStatus": "Disabling"
}
# 最終的に Disabled に戻って完了する
$ aws ds describe-directory-data-access --directory-id d-95674af4a8
{
"DataAccessStatus": "Disabled"
}
2. グループ操作
グループの操作は以下のコマンドで行います。
aws ds-data create-group
aws ds-data delete-group
aws ds-data describe-group
aws ds-data list-groups
aws ds-data search-groups
aws ds-data update-group
基本的に名前通りの操作が可能です。
グループの作成はaws ds-data create-group
コマンドで行い、最低限sAMAccountNameを指定する必要があります。
大抵の場合においてsAMAccountNameは単純にグループ名と考えて大丈夫です。
その他にグループのスコープとタイプを指定できますが、グループの階層は1階層のみとなっています。
aws ds-data create-group --directory-id "ディレクトリID" \
--sam-account-name "グループ名(sAMAccountName)" \
--group-scope "DomainLocal or Global or Universal or BuiltinLocal" \
--group-type "Distribution or Security"
例えばMyGroup
と言う名前のグローバルセキュリティグループを作成する場合は次の様になります。
$ aws ds-data create-group --directory-id d-95674af4a8 \
> --sam-account-name "MyGroup" \
> --group-scope "Global" \
> --group-type "Security"
{
"DirectoryId": "d-95674af4a8",
"SAMAccountName": "MyGroup",
"SID": "S-1-5-21-2658377969-2508436387-3075584147-1168"
}
このコマンドでグループが作成されるのは既定のUsers
OU直下となります。
作成したグループ情報はaws ds-data describe-group
コマンドで取得できます。
このコマンドでは識別名の取得も可能でした。
$ aws ds-data describe-group --directory-id d-95674af4a8 --sam-account-name "MyGroup"
{
"DirectoryId": "d-95674af4a8",
"DistinguishedName": "CN=MyGroup,OU=Users,OU=corp,DC=corp,DC=contoso,DC=com",
"GroupScope": "Global",
"GroupType": "Security",
"Realm": "corp.contoso.com",
"SAMAccountName": "MyGroup",
"SID": "S-1-5-21-2658377969-2508436387-3075584147-1168"
}
aws ds-data update-group
コマンドで既存グループのスコープとタイプや各種属性を更新できます。
各種属性は--other-attribute
パラメーターでMap形式で記述します。
例えばDescription
を変えたい場合は以下の様なコマンドを実行します。
$ aws ds-data update-group --directory-id d-95674af4a8 \
> --sam-account-name "MyGroup" \
> --other-attributes "Description={S=テスト用グループ}
変更可能な属性は以下のドキュメントから確認できます。
グループの検索はaws ds-data list-groups
とaws ds-data search-groups
コマンドから可能です。
これらのコマンドでは既存のグループも検索可能でした。
# BuiltinLocalグループも検索できる
$ aws ds-data list-groups --directory-id d-95674af4a8 --query "Groups[?SAMAccountName == 'Administrators']"
[
{
"GroupScope": "BuiltinLocal",
"GroupType": "Security",
"SAMAccountName": "Administrators",
"SID": "S-1-5-32-544"
}
]
# 特定属性の値を検索可能
$ aws ds-data search-groups --directory-id d-95674af4a8 --search-attributes sAMAccountName --search-string Administrators
{
"Groups": [
{
"GroupScope": "BuiltinLocal",
"GroupType": "Security",
"SAMAccountName": "Administrators",
"SID": "S-1-5-32-544"
}
],
"DirectoryId": "d-95674af4a8",
"Realm": "corp.contoso.com"
}
最後にグループの削除はaws ds-data delete-group
で可能です。
$ aws ds-data delete-group --directory-id d-95674af4a8 --sam-account-name MyGroup
3. ユーザー操作 (基本)
ユーザーの操作は以下のコマンドで行います。
aws ds-data create-user
aws ds-data delete-user
aws ds-data describe-user
aws ds-data disable-user
aws ds-data list-users
aws ds-data search-users
aws ds-data update-user
だいたいグループの操作と同様ですが、ユーザーの状態管理が少し特殊なので解説していきます。
aws ds-data create-user
コマンドでユーザーを作成しますが、初期状態でユーザーは無効状態となっています。
aws ds reset-user-password
コマンドでパスワードリセットをすることで有効な状態になります。
# aws ds-data create-user コマンドの基本的なパラメーターを紹介
aws ds-data create-user --directory-id "ディレクトリID" \
--sam-account-name "ユーザー名(sAMAccountName)" \
--surname "姓" --given-name "名" \
--email-address "メールアドレス"
# ユーザーは初期状態で無効なのでパスワードリセットをして有効にする
aws ds reset-user-password --directory-id "ディレクトリID" \
--user-name "ユーザー名(sAMAccountName)" \
--new-password "新しいパスワード"
実際の動作はこんな感じになります。
$ aws ds-data create-user --directory-id d-95674af4a8 \
> --sam-account-name "kurameso.tarou" \
> --surname "クラメソ" --given-name "太郎" \
> --email-address "tarou@example.com"
{
"DirectoryId": "d-95674af4a8",
"SAMAccountName": "kurameso.tarou",
"SID": "S-1-5-21-2658377969-2508436387-3075584147-1170"
}
初期状態ではユーザーは無効
# ユーザーは初期状態で無効なのでパスワードリセットをして有効にする
$ aws ds reset-user-password --directory-id d-95674af4a8 \
> --user-name "kurameso.tarou" \
> --new-password "P@ssword"
パスワードリセットして有効にする
ちなみにこのコマンドで追加されたユーザーは一般的なドメインユーザー同様にDomain Users
グループ所属となります。
作成されたユーザーはaws ds-data describe-user
コマンドで参照可能です。
$ aws ds-data describe-user --directory-id d-95674af4a8 --sam-account-name kurameso.tarou
{
"DirectoryId": "d-95674af4a8",
"DistinguishedName": "CN=kurameso.tarou,OU=Users,OU=corp,DC=corp,DC=contoso,DC=com",
"EmailAddress": "tarou@example.com",
"Enabled": true,
"GivenName": "太郎",
"Realm": "corp.contoso.com",
"SAMAccountName": "kurameso.tarou",
"SID": "S-1-5-21-2658377969-2508436387-3075584147-1170",
"Surname": "クラメソ",
"UserPrincipalName": "kurameso.tarou@CORP.CONTOSO.COM"
}
aws ds-data update-user
コマンドで既存ユーザー情報を更新できます。
更新可能な情報はパラメーターで指定可能な項目に加えてグループの時と同様にOther Attributeな属性も選択可能です。
$ aws ds-data update-user --directory-id d-95674af4a8 \
> --sam-account-name kurameso.tarou \
> --other-attributes "Description={S=テスト用ユーザー}"
ユーザーの検索はaws ds-data list-users
とaws ds-data search-users
コマンドから可能です。
これらのコマンドもグループの時と概ね同じです。
# Builtinユーザーも検索できる
$ aws ds-data list-users --directory-id d-95674af4a8 --query "Users[?SAMAccountName == 'Administrator']"
[
{
"Enabled": true,
"SAMAccountName": "Administrator",
"SID": "S-1-5-21-2658377969-2508436387-3075584147-500"
}
]
# 特定属性の値を検索可能
$ aws ds-data search-users --directory-id d-95674af4a8 --search-attributes sAMAccountName --search-string Administrator
{
"Users": [
{
"Enabled": true,
"SAMAccountName": "Administrator",
"SID": "S-1-5-21-2658377969-2508436387-3075584147-500"
}
],
"DirectoryId": "d-95674af4a8",
"Realm": "corp.contoso.com"
}
既存のユーザーを無効にしたい場合はaws ds-data disable-user
コマンドを使います。
再度有効にしたい場合はパスワードリセットが必要です。
$ aws ds-data disable-user --directory-id d-95674af4a8 --sam-account-name kurameso.tarou
最後にユーザーの削除はaws ds-data delete-group
で可能です。
$ aws ds-data delete-group --directory-id d-95674af4a8 --sam-account-name kurameso.tarou
4. ユーザー操作 (グループ参加)
ユーザーが所属するグループを確認・変更するには
aws ds-data add-group-member
aws ds-data list-group-members
aws ds-data list-groups-for-member
aws ds-data remove-group-member
コマンドを使います。
aws ds-data add-group-member
コマンドで指定のグループにメンバーを追加します。
# 追加例 : MyGroup に kurameso.tarou を追加
$ aws ds-data add-group-member --directory-id d-95674af4a8 --group-name MyGroup --member-name kurameso.tarou
特定グループに所属するメンバーを確認するにはaws ds-data list-group-members
コマンドを使います。
$ aws ds-data list-group-members --directory-id d-95674af4a8 --sam-account-name MyGroup
{
"Members": [
{
"MemberType": "USER",
"SAMAccountName": "kurameso.tarou",
"SID": "S-1-5-21-2658377969-2508436387-3075584147-1170"
}
],
"DirectoryId": "d-95674af4a8",
"MemberRealm": "corp.contoso.com",
"Realm": "corp.contoso.com"
}
逆にメンバーから所属グループを確認するにはaws ds-data list-groups-for-member
コマンドを使います。
$ aws ds-data list-groups-for-member --directory-id d-95674af4a8 --sam-account-name kurameso.tarou
{
"Groups": [
{
"GroupScope": "Global",
"GroupType": "Security",
"SAMAccountName": "MyGroup",
"SID": "S-1-5-21-2658377969-2508436387-3075584147-1169"
},
{
"GroupScope": "Global",
"GroupType": "Security",
"SAMAccountName": "Domain Users",
"SID": "S-1-5-21-2658377969-2508436387-3075584147-513"
}
],
"DirectoryId": "d-95674af4a8",
"MemberRealm": "corp.contoso.com",
"Realm": "corp.contoso.com"
}
最後にグループからメンバーを除外するにはaws ds-data remove-group-member
コマンドを使います。
# MyGroup から kurameso.tarou を除外
$ aws ds-data remove-group-member --directory-id d-95674af4a8 --group-name MyGroup --member-name kurameso.tarou
# MyGroup から離脱済みであることを確認
$ aws ds-data list-groups-for-member --directory-id d-95674af4a8 --sam-account-name kurameso.tarou
{
"Groups": [
{
"GroupScope": "Global",
"GroupType": "Security",
"SAMAccountName": "Domain Users",
"SID": "S-1-5-21-2658377969-2508436387-3075584147-513"
}
],
"DirectoryId": "d-95674af4a8",
"MemberRealm": "corp.contoso.com",
"Realm": "corp.contoso.com"
}
最後に
以上となります。
殆どのコマンドは名前から直感的に操作できるかと思います。
AWS CLI(およびREST API)からだと新規作成したユーザーは初期状態が無効でパスワードリセットによる有効化が必要になる点が特徴的なので押さえておくと良いでしょう。